Hyperledger Composer的cryptogen、configtxgen等配置文件详解 | 程序小兵

Hyperledger Composer的cryptogen、configtxgen等配置文件详解

前言

fabric的启动需要用到的配置文件,是采用cryptogen、configtxgen二进制工具产生的,因此,在介绍配置信息时,优先需要了解这2个工具的来源。

  • cryptogen: 用于产生orderer、peer节点所需要的证书;
  • configtxgen: 用于产生交易配置文件,在Orderer创建传世块、Peer加入channel时候需要用到的配置文件;

可见,以上2个工具的重要性;为了获得者2个工具,这边提供了2种获取方式:

  1. 编译源码方式;
  2. 下载二进制文件方式;

前者可以通过下载源码,直接进行编译,适用于fabric的orderer、peer等都是通过下载源码直接编译获得,因此编译所需要的各种工具及配置也已经齐全,在这个前提下进行编译得到cryptogen、configtxgen很是方便;

若使用的orderer、peer等都是采用官方的hyperledger/orderer等镜像进行直接启动的,则建议直接下载对应平台、版本编译好的二进制文件。

本文采用方式2

下载二进制文件的方式

为了快速的下载镜像、二进制文件,同样有2种方式:

  1. 采用hyperledger fabricgithub 提供的个shell脚本,支持下载镜像、例子及工具包;
  2. 直接下载打包的工具包;

为了日后存档,及多机部署,因此我采用方式2,这里提供了2种方式的下载;

方式1支持直接在Linux下通过curl命令下载;

curl -sSL  https://github.com/hyperledger/fabric/blob/master/scripts/bootstrap.sh | bash -s 1.1.0

通过curl命令下载,必须支持https的访问,因此curl版本低的话可能会报错,需要更新curl

方式2通过在windows下载后,上传到Linux服务器;

https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.1.0/hyperledger-fabric-linux-amd64-1.1.0.tar.gz

打开浏览器,输入上面下载链接进行下载,由于本机使用Linux-amd64,下载的是1.1.0版本的,下载的版本需根据你具体的系统配置相关,自行修改即可。下载后的文件名为hyperledger-fabric-linux-amd64-1.1.0.tar.gz,通过以下解压命令得到bin目录及子文件:

tar -xzvf hyperledger-fabric-linux-amd64-1.1.0.tar.gz

bin目录文件内容如下:

tomato@ubuntu:bin$ tree
.
|-- configtxgen
|-- configtxlator
|-- cryptogen
|-- get-docker-images.sh
|-- orderer
`-- peer
0 directories, 6 files

为了能在非bin目录正常使用上面的二进制的文件,因此需要将上面的6个文件分别创建Linux的软连接ln -s,将目录切换到bin目录下,连接命令如下:

ln -s cryptogen /usr/bin
ln -s configtxlator /usr/bin
ln -s configtxgen /usr/bin
ln -s orderer /usr/bin
ln -s peer /usr/bin

更简便者,直接把上面的可执行文件拷贝到/usr/bin目录下。

使用cryptogen命令

cryptogen命令为是便捷产生orderer、peer的证书,为后续加入channel、交易签名等提供数字签名所需要的证书。

cryptogen为了能正常使用,需要配合crypto-config.yaml的文件使用。该文件可以配置org、peer、orderer的节点信息进行统一管理,以下是本人的配置信息,配置了3个org机构、orderer的domain为zeuslook.com、每个机构有2个Peer节点,如果没有集合fabric-ca,为了日后业务开展,可以生成大批量『大批机构、大批peer节点』的证书:

OrdererOrgs:
  - Name: Orderer
    Domain: zeuslook.com
    Specs:
      - Hostname: orderer
PeerOrgs:
  - Name: Org1
    Domain: org1.zeuslook.com
    Template:
      Count: 2
    Users:
      Count: 0
  - Name: Org2
    Domain: org2.zeuslook.com
    Template:
      Count: 2
    Users:
      Count: 0
  - Name: Org3
    Domain: org3.zeuslook.com
    Template:
      Count: 2
    Users:
      Count: 0

有了以上命令,就可以通过cryptogen命令生成证书:

cryptogen generate --config=./crypto-config.yaml

执行了以上操作后,会在当前的crypto-config目录下生成对应的文件,为了保证每次数据的正确性,建议每次生成时都删除掉该目录下的配置信息,新生成的文件目录结构如下:

tomato@ubuntu:crypto-config$ tree -L 4
.
|-- ordererOrganizations
|   `-- zeuslook.com
|       |-- ca
|       |   |-- 75f8eae45073bf9cab573f05e37a0914d6735ca2dc2bc49d498c3aa06f1721c4_sk
|       |   `-- ca.zeuslook.com-cert.pem
|       |-- msp
|       |   |-- admincerts
|       |   |-- cacerts
|       |   `-- tlscacerts
|       |-- orderers
|       |   `-- orderer.zeuslook.com
|       |-- tlsca
|       |   |-- 4f4655a1be02fe2b97670f62de8674280abd13f083df61561d020b4e555b470b_sk
|       |   `-- tlsca.zeuslook.com-cert.pem
|       `-- users
|           `-- Admin@zeuslook.com
`-- peerOrganizations
    |-- org1.zeuslook.com
    |   |-- ca
    |   |   |-- 9fc5b582c08fff830c66c0b042a1c2802a36a2d1309bd4a28967e6671e6ad9d7_sk
    |   |   `-- ca.org1.zeuslook.com-cert.pem
    |   |-- msp
    |   |   |-- admincerts
    |   |   |-- cacerts
    |   |   `-- tlscacerts
    |   |-- peers
    |   |   |-- peer0.org1.zeuslook.com
    |   |   `-- peer1.org1.zeuslook.com
    |   |-- tlsca
    |   |   |-- 55bc5fa06d887adfc18226682ef27cff90dfbe3a223e9dcb80132092d0a60a8d_sk
    |   |   `-- tlsca.org1.zeuslook.com-cert.pem
    |   `-- users
    |       `-- Admin@org1.zeuslook.com
    |-- org2.zeuslook.com
    |   |-- ca
    |   |   |-- 3b3a86672487e87473f6e0c6c08de392b4605de4e27a7219864a093b73972c43_sk
    |   |   `-- ca.org2.zeuslook.com-cert.pem
    |   |-- msp
    |   |   |-- admincerts
    |   |   |-- cacerts
    |   |   `-- tlscacerts
    |   |-- peers
    |   |   |-- peer0.org2.zeuslook.com
    |   |   `-- peer1.org2.zeuslook.com
    |   |-- tlsca
    |   |   |-- 29b239e903ab70e403edf9bb89f1f5408e44c7d80550b15a4284e2db3c929d62_sk
    |   |   `-- tlsca.org2.zeuslook.com-cert.pem
    |   `-- users
    |       `-- Admin@org2.zeuslook.com
    `-- org3.zeuslook.com
        |-- ca
        |   |-- ca.org3.zeuslook.com-cert.pem
        |   `-- ff27fee4850d56aae2a52f008e8bad74416612c08858d0bddd80a4dca2c3cda4_sk
        |-- msp
        |   |-- admincerts
        |   |-- cacerts
        |   `-- tlscacerts
        |-- peers
        |   |-- peer0.org3.zeuslook.com
        |   `-- peer1.org3.zeuslook.com
        |-- tlsca
        |   |-- f8c39c4f957f1830034adb5cd0b0013ac956d82c49020f6b36fcb620c9f4ccdb_sk
        |   `-- tlsca.org3.zeuslook.com-cert.pem
        `-- users
            `-- Admin@org3.zeuslook.com

49 directories, 16 files

由上面信息可以看出,正确的生产了3个Org机构及每个机构下对应2个Peer节点、1个ca节点、1个Orderer节点。记住_sk结尾的文件,后续会使用到!

恭喜你已经成功的生成了证书!

使用configtxgen命令

configtxgen命令是为了生成传世块及交易配置块信息,为后续Order的启动、Peer加入channel提供配置信息。

configtxgen配合其配置文件configtx.yaml一起使用,该配置文件可以同时配置多个属性值,我的配置文件内容如下:

Profiles:
    ComposerOrdererGenesis:
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
        Consortiums:
            ComposerConsortium:
                Organizations:
                    - *Org1
                    - *Org2
    ComposerChannel:
        Consortium: ComposerConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
Organizations:
    - &OrdererOrg
        Name: OrdererOrg
        ID: OrdererMSP
        MSPDir: crypto-config/ordererOrganizations/zeuslook.com/msp
        AdminPrincipal: Role.MEMBER
    - &Org1
        Name: Org1
        ID: Org1MSP
        MSPDir: crypto-config/peerOrganizations/org1.zeuslook.com/msp
        AdminPrincipal: Role.MEMBER
        AnchorPeers:
            - Host: peer0.org1.zeuslook.com
              Port: 7051
    - &Org2
        Name: Org2
        ID: Org2MSP
        MSPDir: crypto-config/peerOrganizations/org2.zeuslook.com/msp
        AdminPrincipal: Role.MEMBER
        AnchorPeers:
            - Host: peer0.org2.zeuslook.com
              Port: 7051
Orderer: &OrdererDefaults
    OrdererType: solo
    Addresses:
        - orderer.zeuslook.com:7050
    BatchTimeout: 2s
    BatchSize:
        MaxMessageCount: 10
        AbsoluteMaxBytes: 98 MB
        PreferredMaxBytes: 512 KB
    Kafka:
        Brokers:
            - 127.0.0.1:9092
    Organizations:
Application: &ApplicationDefaults
    Organizations:

其中,配置选项ComposerOrdererGenesis是为了创建orderer的创世块;配置选项ComposerChannel是为了生成交易的配置文件tx。现在有了configtx.yaml的配置文件及其二进制文件configtxgen,可以生成具体的创世块和交易配置块了。

生成composer-genesis.block文件

export FABRIC_CFG_PATH=$PWD
configtxgen -profile ComposerOrdererGenesis -outputBlock ./composer-genesis.block

输出结果:

tomato@ubuntu:composer$ configtxgen -profile ComposerOrdererGenesis -outputBlock ./composer-genesis.block
2018-06-04 16:42:23.360 CST [common/tools/configtxgen] main -> INFO 001 Loading configuration
2018-06-04 16:42:23.388 CST [common/tools/configtxgen] doOutputBlock -> INFO 002 Generating genesis block
2018-06-04 16:42:23.389 CST [common/tools/configtxgen] doOutputBlock -> INFO 003 Writing genesis block

说明:

configtxgen获取配置文件configtx.yaml的配置选项ComposerOrdererGenesis,生成创世块为composer-genesis.block保存在当期的目录下,该文件在Orderer的启动时,需要使用到。

生成composer-channel.tx文件

configtxgen -profile ComposerChannel -outputCreateChannelTx ./composer-channel.tx -channelID composerchannel

输出结果:

tomato@ubuntu:composer$ configtxgen -profile ComposerChannel -outputCreateChannelTx ./composer-channel.tx -channelID composerchannel
2018-06-04 16:43:08.538 CST [common/tools/configtxgen] main -> INFO 001 Loading configuration
2018-06-04 16:43:08.570 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2018-06-04 16:43:08.644 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 003 Writing new channel tx

说明:
configtxgen获取配置文件configtx.yaml的配置选项ComposerChannel,生成交易配置块composer-channel.tx保存在当期的目录下,该文件在创建channel时,需要使用到,从而得到通道块配置(如composer-channel.block),peer节点再通过此通道块配置加入到具体的通道中,曾经在这里与创世块纠结、试错了许久。

最后启动fabric

composer自带了startFabric.sh启动脚本,该命令会读取yaml的配置文件docker-compose-dev.yaml文件。启动脚本会启动orderer、ca、2个机构的Peer、couchdb,最后通过交易配置块,创建通道composerchannel信息,并加入该通道,成功的启动输出结果如下:

Development only script for Hyperledger Fabric control
Running 'stopFabric.sh'
FABRIC_VERSION is unset, assuming hlfv11
FABRIC_START_TIMEOUT is unset, assuming 15 (seconds)
tomato@ubuntu:fabric-dev-servers$ ./startFabric.sh
Development only script for Hyperledger Fabric control
Running 'startFabric.sh'
FABRIC_VERSION is unset, assuming hlfv11
FABRIC_START_TIMEOUT is unset, assuming 15 (seconds)
Removing peer0.org2.zeuslook.com ... done
Removing peer1.org2.zeuslook.com ... done
Removing peer0.org1.zeuslook.com ... done
Removing peer1.org1.zeuslook.com ... done
Removing ca.org2.zeuslook.com ... done
Removing ca.org1.zeuslook.com ... done
Removing orderer.zeuslook.com ... done
Removing couchdb ... done
Removing network composer_default
Creating network "composer_default" with the default driver
....
2018-06-04 09:31:45.366 UTC [msp/identity] Sign -> DEBU 005 Sign: digest: E8219E6F9ADA5651B9032E4120463B4AAC0E17205A423E0031739465CE49ABE1
2018-06-04 09:31:45.963 UTC [channelCmd] executeJoin -> INFO 006 Successfully submitted proposal to join channel
2018-06-04 09:31:45.963 UTC [main] main -> INFO 007 Exiting.....

最后的docker进程如下:

CONTAINER ID        NAME                      CPU %               MEM USAGE / LIMIT     MEM %               NET
b476044e84dd        ca.org1.zeuslook.com      0.00%               5.43MiB / 1.925GiB    0.28%               8.76kB
39546c964030        couchdb                   0.28%               92.84MiB / 1.925GiB   4.71%               27.8kB
d7aaf4b22228        ca.org2.zeuslook.com      0.00%               5.477MiB / 1.925GiB   0.28%               6.83kB
3132408986b0        orderer.zeuslook.com      0.01%               8.098MiB / 1.925GiB   0.41%               18.3kB
a6e1fd4ce4c0        peer0.org1.zeuslook.com   1.39%               40.79MiB / 1.925GiB   2.07%               797kB
165aea4a5587        peer1.org2.zeuslook.com   1.37%               29.7MiB / 1.925GiB    1.51%               8.43kB
67b95dd93a1c        peer0.org2.zeuslook.com   1.46%               29.65MiB / 1.925GiB   1.50%               8.21kB
7a53d68b2db6        peer1.org1.zeuslook.com   1.59%               28.65MiB / 1.925GiB   1.45%               8.18kB

后续

为了方便交流,特此荒废了多年的QQ重新建立起QQ群:788572702,QQ群的二维码懒人加入为方式,则打开手机QQ扫一扫,一键申请:

文章目录
  1. 1. 前言
  2. 2. 下载二进制文件的方式
  3. 3. 使用cryptogen命令
  4. 4. 使用configtxgen命令
    1. 4.1. 生成composer-genesis.block文件
    2. 4.2. 生成composer-channel.tx文件
  5. 5. 最后启动fabric
  6. 6. 后续
,